<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/8/14
 * Time: 18:20
 */

namespace app\index\server;

use app\index\inter\BaseInterface;
use app\index\controller\UpLoadImg;
use app\index\model\Image as ImageModel;
use app\index\model\Product as ProductModel;
use app\index\model\Theme as ThemeModel;
use app\lib\exception\ImageException;

class BaseServer implements BaseInterface
{
    public function getList($params = [])
    {

    }

    public function addOrUpdate($params = [])
    {
        // 首先判定是更新或者添加操作
        if(isset($params['primary_key'])) {
            // 更新操作
            return $this->update($params);
        }
        return $this->add($params);
    }

    public function changeStatus($id)
    {
        
    }

    public function detail($id)
    {
        
    }

    public function prep_param($params)
    {
        $params['sort'] = isset($params['sort']) ? $params['sort'] : 'id';
        $params['order'] = 'desc';
        $params['offset'] = intval($params['offset']);
        $params['limit'] = intval($params['limit']);
        return $params;
    }

    protected function update($params)
    {

    }

    protected function add($params)
    {

    }

    // 上传图片
    protected function upload_img($img_name, $path, $file_name = "image")
    {
        // 上传图片
        //        var_dump($img_name, $path, $file_name);die;
        $file = request()->file($file_name);
        $image = (new UpLoadImg())->index($file, $img_name, $path);
        return $image;
        //        $path =  DS . 'images' . DS . $path . DS;
        //        $image_info = $file->rule(function () use ($img_name){
        //            return $img_name;
        //        })->move(ROOT_PATH . 'public' . $path);
        //        if($image_info) {
        //            $save_name = $image_info->getSaveName();
        //            return $path . $save_name;
        //        } else {
        //            // 抛出上传错误
        //            $error = new ImageException([
        //                'msg' => $file->getError()
        //            ]);
        //            throw $error;
        //        }
    }

    // 保存上传图片
    protected function save_upload_image($data)
    {

    }

    // 处理图片的逻辑 primary_key 是判断是否是更新操作 img_id是此图片的更新操作 但是这里不允许更新(ps 其他地方也有可能会用到此图片)
    protected function handle_image($image_alias, $url, $path,  $primary_key, $img_id = '', $file_name = "image")
    {
        // 查找图片名称是否存在
        $img = ImageModel::where('alias', '=', $image_alias)
            ->where('id', '<>', $img_id)
            ->find();
        // 存在则不用理会 url 和上传图片
        // 图片存在
        if($img && ($primary_key || !$url)) {
            // 更新操作 并且 alias 不变(现在不允许更新图片 只能新增)
            // 输入的 alias 存在 且url 为空 使用已有的图片作为此操作的图片
            return [
                'status' => 1,
                'msg' => $img['url'],
                'img_id' => $img['id']
            ];
        }
        if($img && !$img_id) {
            return [
                'status' => 0,
                'msg' => $url . '命名冲突',
                'img_id' => $img->id,
            ];
        }
        // 图片不存在
        // 检测 url 是来自公网或者本地
        $img_data = [];
        $img_data['from'] = substr($url,0, 4) == 'http' ?  2 : 1;
        // 来自本地要上传图片 更新有可能就只是改名字而已
        if($img_data['from'] == 1) {
            // 检测上传图片名称是否可用
            $img_path = $path . DS . $url;
            $img_url_exists = ImageModel::where('url', $img_path)
                ->where('from', '=', 1)
                ->select();
            if($img_url_exists) {
                // 图片名称存在 如果上传则会覆盖之前上传的图片
                return [
                    'status' => 0,
                    'msg' => '图片名称已经存在'
                ];
            }
            // 上传图片
            $file_name = $this->upload_img($url, $path, $file_name);
            $img_data['url'] = $file_name;
        } else {
            $img_data['url'] = $url;
        }
        // 准备写入 image 的数据
        $img_data['status'] = 1;
        if($img_id) {
            $result = ImageModel::where('id', '=', $img_id)
                ->update($img_data);
            if($result) $result = $img_id;
        } else {
            $img_data['alias'] = $image_alias;
            $result = ImageModel::insertGetId($img_data);
        }
        if(!$result) {
            return [
                'status' => 0,
                'msg' => '图片数据操作失败'
            ];
        }
        return [
            'status' => 1,
            'msg' => $img_data['url'],
            'img_id' => $result
        ];
    }

    // 判断商品是否存在
    protected function product_exists($name)
    {
        $exists_product = ProductModel::where('name', $name)
            ->find();
        if($exists_product) {
            return $exists_product;
        }
        return false;
    }

    // 查看主题是否存在
    protected function theme_exists($name)
    {
        $exists_theme = ThemeModel::where('name', '=', $name)
            ->find();
        if(!$exists_theme) {
            return false;
        }
        return $exists_theme;
    }
}
